#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=11000;
struct edge
{
	int v,no;
}x[maxn],y[maxn];
struct rec
{
	int x1,x2,y1,y2;
}r[5001];
int n,a[maxn],nx[maxn],ny[maxn];
int cmp(edge a,edge b)
{
	return a.v<b.v;
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=2*n;i++)x[i].no=y[i].no=i;
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d%d%d",&r[i].x1,&r[i].y1,&r[i].x2,&r[i].y2);
		x[2*i-1].v=r[i].x1;x[2*i].v=r[i].x2;
		y[2*i-1].v=r[i].y1;y[2*i].v=r[i].y2;
	}
	sort(x+1,x+2*n+1,cmp);
	sort(y+1,y+2*n+1,cmp);
	for(int i=1;i<=2*n;i++)
	{nx[x[i].no]=i;ny[y[i].no]=i;}
	long long ans=0;
	for(int i=2;i<=2*n;i++)
	{
		long long len=x[i].v-x[i-1].v;
		memset(a,0,sizeof(a));
		for(int j=1;j<=n;j++)
			if(r[j].x1<=x[i-1].v&&r[j].x2>=x[i].v)
			{a[ny[j*2-1]]++;a[ny[j*2]]--;}
		long long sum=0;
		int add=0;
		for(int j=1;j<=2*n;j++)
			if(a[j]!=0)
			{
				if(add==0)sum++;
				add+=a[j];
				if(add==0)sum++;
			}
		ans+=sum*len;
	}
	for(int i=2;i<=2*n;i++)
	{
		long long len=y[i].v-y[i-1].v;
		memset(a,0,sizeof(a));
		for(int j=1;j<=n;j++)
			if(r[j].y1<=y[i-1].v&&r[j].y2>=y[i].v)
			{a[nx[j*2-1]]++;a[nx[j*2]]--;}
		long long sum=0;
		long long add=0;
		for(int j=1;j<=2*n;j++)
			if(a[j]!=0)
			{
				if(add==0)sum++;
				add+=a[j];
				if(add==0)sum++;
			}
		ans+=sum*len;
	}
	printf("%lld\n",ans);
	return 0;
}


